import { defineConfig, loadEnv } from 'vite'
import vue from '@vitejs/plugin-vue'
import path from 'path'

// 样式/组件自动引入
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'

// Element自动导入图标
import Icons from 'unplugin-icons/vite'
import IconsResolver from 'unplugin-icons/resolver'

// 自定义图标文件路径
import { createSvgIconsPlugin } from "vite-plugin-svg-icons"

// 引入mock
import { viteMockServe } from 'vite-plugin-mock'

// 缓存组件时需要
// import vueSetupExtend from 'vite-plugin-vue-setup-extend-plus'

// https://vitejs.dev/config/
export default defineConfig(({ mode }) => {
  const env = loadEnv(mode, process.cwd())
  // console.log('VITE_APP_SERVICE_URL', env.VITE_APP_SERVICE_URL)
  return {
    plugins: [
      vue(),
      viteMockServe({
        mockPath: './mock', // 设置模拟数据的存储文件夹
        // @ts-ignore
        supportTs: true,//是否读取ts文件模块
        logger: true,//是否在控制台显示请求日志
        localEnabled: true,//设置是否启用本地mock文件
        prodEnabled: true//设置打包是否启用mock功能 
      }),
      // vueSetupExtend(), // 使用 <script setup name="xx"> 上name作为缓存组件名
      AutoImport({
        dts: "src/types/auto-import.d.ts",
        resolvers: [
          ElementPlusResolver(),
          // 自动导入图标组件
          IconsResolver({
            prefix: 'Icon',
          }),
        ],
        imports: [
          // 需要自动导入的插件，自定义导入的API
          'vue',
          'vue-router',
          'pinia',
        ],
      }),
      Components({
        dts: 'src/types/components.d.ts', // 指明 .d.ts 文件的位置和文件名
        resolvers: [
          //自动注册图标组件
          IconsResolver({
            enabledCollections: ['ep'],
          }),
          ElementPlusResolver()
        ],
        deep: true, // 搜索子目录
        dirs: ['src/components', 'src/views', 'src/layouts'], // 按需加载的文件夹
      }),
      Icons({
        compiler: 'vue3',
        autoInstall: true
      }),
      createSvgIconsPlugin({
        // 自定义图标文件路径
        iconDirs: [
          path.resolve(process.cwd(), 'src/assets/icons/feather')
        ],
        symbolId: 'icon-[dir]-[name]',
      }),
    ],
    resolve: {
      alias: {
        '@': path.resolve(process.cwd(), './src'), // process.cwd()当前项目绝对路径
        '~': path.resolve(process.cwd()),
      }
    },
    server: {
      // 允许IP访问
      host: "0.0.0.0",
      // 应用端口 (默认:5173)
      port: parseInt(env.VITE_APP_PORT),
      // 运行是否自动打开浏览器
      open: true,
      proxy: {
        [env.VITE_APP_BASE_API]: {
          changeOrigin: true,
          target: env.VITE_APP_SERVICE_URL,
          rewrite: (path) => path.replace(new RegExp(`^${env.VITE_APP_BASE_API}`), ''),
        },
      },
    },
  }
})
